/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package src.枚举类;
/**
 * @description 使用 enum关键字
 * 使用说明
 * 使用 enum 定义的枚举类默认继承了 java.lang.Enum类，因此不能再
 * 继承其他类
 * 枚举类的构造器只能使用 private 权限修饰符
 * 枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾)。列出的
 * 实例系统会自动添加 public static final 修饰
 * 必须在枚举类的第一行声明枚举类对象
 * JDK 1.5 中可以在 switch 表达式中使用Enum定义的枚举类的对象
 * 作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举
 * 类作为限定。
 *
 * Enum类的主要方法：
 *   values()方法：返回枚举类型的对象数组。该方法可以很方便地遍历所有的
 *      枚举值。
 *   valueOf(String str)：可以把一个字符串转为对应的枚举类对象。要求字符
 *      串必须是枚举类对象的“名字”。如不是，会有运行时异常：
 *      IllegalArgumentException。
 *   toString()：返回当前枚举类对象常量的名称
 *
 * @author 俊昭
 * @date 2022/4/18
*/
public class EnumTest {
//        String[][][] arr = new String[2][][];
    public static void main(String[] args) {
        System.out.println(Sex.MEN);
        System.out.println(Sex.WOMEN);
        Sex.WOMEN.show();
        System.out.println(Sex.MEN.getSex());

        Sex sex = Sex.MEN;
        System.out.println(sex);// MEN 未重写toString方法时
        System.out.println("***********************");


        Sex[] values = Sex.values();
        for (Sex value : values) {
            System.out.println(value);
        }
        System.out.println("***********************");

        Thread.State[] arr = Thread.State.values();
        /*
         NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED
         */
        for (Thread.State state : arr) {
            System.out.println(state);
        }

        Sex s = Sex.valueOf("MEN");
        System.out.println(s);
        System.out.println("***********************");

        Sex s2 = null;
        try {
            s2 = Sex.valueOf("M");// IllegalArgumentException非法参数异常
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
        System.out.println(s2);




    }
}
enum Sex implements A{
    MEN("男性","有责任担当"){
        @Override
        public void show() {
            System.out.println("我是男性");
        }
    },
    WOMEN("女性","温柔又贤惠"){
        @Override
        public void show() {
            System.out.println("我是女性");
        }
    },
    ;

    private final String sex;
    private final String desc;

    Sex(String sex, String desc) {
        this.sex = sex;
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "性别:"+ sex  +
                ", 描述:" + desc ;
    }

    public String getSex() {
        return sex;
    }


}